package Year2013;

/**
 * “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字，每个都恰好出现1次。”
 * 请你推算一下，他当时到底有多年轻。
 * 通过浏览器，直接提交他那时的年龄数字。
 * 注意:不要提交解答过程，或其它的说明文字。
 * 解题思路1：（1）计算年龄区间 18-22，（2）设计算法，验证数字
 */
public class C组_猜年龄 {
    public static void main(String[] args) {
        getMinMax();
        System.out.println("暴力眼观法：");
        System.out.println(18*18*18 + " " + 18*18*18*18);
        System.out.println(19*19*19 + " " + 19*19*19*19);
        System.out.println(20*20*20 + " " + 20*20*20*20);
        System.out.println(21*21*21 + " " + 21*21*21*21);
        System.out.println(22*22*22 + " " + 22*22*22*22);
        System.out.println("暴力算法：");
        for (int i = 18; i <= 22; i++) {
            if(check(i) == true)
                System.out.println("age: "+i);
        }


    }
    public static void getMinMax(){
        for (int i = 0; i < 100; i++) {
            if(i*i*i*i > 100000){
                System.out.println("minAge: "+i);
                break;
            }
        }
        for (int i = 0; i < 100; i++) {
            if(i*i*i > 9999){
                System.out.println("maxAge: "+i);
                break;
            }
        }
    }
    public static boolean check(int age) {
        boolean isOk = true;
        int fourNumber = age * age * age;
        int sixNumber = age * age * age * age;
        int[] visit = new int[10];
        for (int i = 0; i < 10; i++) {
            visit[i] = 0;
        }
        for (int i = 0; i < 4; i++) {
            if (visit[fourNumber % 10] == 0){
                visit[fourNumber % 10] = 1;
                fourNumber = fourNumber/10;
            }
            else {
                isOk = false;
                return isOk;
            }
        }
        for (int i = 0; i < 6; i++) {
            if(visit[sixNumber%10] == 0){
                visit[sixNumber%10] = 1;
                sixNumber = sixNumber/10;
            }
            else {
                isOk = false;
                return isOk;
            }
        }
        return isOk;
    }
}
